#include <iostream>
#include <vector>
#include <stack>
#include <unordered_map>
using namespace std;
using LL=long long;
int main() {

    int n;
    cin>>n;
    vector<LL> vecArr(n);
    for(int i=0;i<n;++i){
        cin>>vecArr[i];
    }
    if(n<2){
        cout<<0<<endl;
        return 0;
    }
    LL nRet=0;
    stack<int> st;
    unordered_map<int,int> has;
    for(int i=0;i<n;++i){
        while(st.size() && vecArr[st.top()]>vecArr[i]){
            int u=st.top();
            st.pop();
            nRet+=has[vecArr[u]];
            has[vecArr[u]]=0;
        }
        if(st.empty()){
            st.push(i);
        }
        else{
            if(vecArr[i]>vecArr[st.top()]){
                ++nRet;
                st.push(i);
            }
            else{
                nRet+=has[vecArr[i]];

                if(st.size()>1){
                    ++nRet;
                }
            }
        }
        ++has[vecArr[i]];
    }
    cout<<nRet<<endl;


    return 0;
}
